package com.ebring.shareEducation.utils;


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;

import net.sf.json.JSONObject;
import org.springframework.util.StringUtils;


/**
 * Created by Cola
 * Date  2018/9/12 09:13
 * <p>
 * 百度地图地址经纬度转换
 */
public class BaiduMapUtils {

    /**
     * 百度地图通过经纬度来获取当前城市地址,传入参数纬度lat、经度lng
     *
     * @param lat
     * @param lng
     * @return
     */


    public static String getCity(String lat, String lng) {

        // 只获取城市名称
        JSONObject obj = getLocationInfo(lat, lng).getJSONObject("result").getJSONObject("addressComponent");

        return obj.getString("city");
    }

    public static JSONObject getLocationInfo(String lat, String lng) {
        String url = "http://api.map.baidu.com/geocoder/v2/?location=" + lat + "," + lng + "&output=json&ak=" + AK + "&pois=0";
        String json = loadJSON(url);
//        JSONObject obj = JSONObject.fromObject(HttpUtils.getRequest(url));

        JSONObject obj = JSONObject.fromObject(json);
        System.out.println(obj);
        return obj;
    }


    /**
     * 百度地图通过经纬度来获取全部地址,传入参数纬度lat、经度lng
     *
     * @param lat
     * @param lng
     * @return
     */

    public static String getAddress(String lat, String lng) {
        JSONObject obj = getLocationInfo(lat, lng).getJSONObject("result");

        return obj.getString("formatted_address");

    }


    /**
     * 百度地图通过地址来获取经纬度，传入参数address
     *
     * @param address
     * @return
     */

    static String AK = "i6pObFkF3fjbx6PrEeGTYp4SHe4WEDg6";

    public static Map<String, Double> getLngAndLat(String address) {
        if (StringUtils.isEmpty(address)) {
            return null;
        }
        Map<String, Double> map = new HashMap<>();
        String url = "http://api.map.baidu.com/geocoder/v2/?address=" + address + "&output=json&ak=" + AK;
        String json = loadJSON(url);
        JSONObject obj = JSONObject.fromObject(json);
        if (obj.get("status").toString().equals("0")) {
            double lng = obj.getJSONObject("result").getJSONObject("location").getDouble("lng");
            double lat = obj.getJSONObject("result").getJSONObject("location").getDouble("lat");

            // 保留两位小数后的结果
            double lng1 = new BigDecimal(lng).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
            double lat1 = new BigDecimal(lat).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();

            map.put("lng", lng1);
            map.put("lat", lat1);
            System.out.println("经度：" + lng + "--- 纬度：" + lat);
        } else {
            System.out.println("未找到相匹配的经纬度！");
        }
        return map;
    }

    public static String loadJSON(String url) {
        StringBuilder json = new StringBuilder();
        try {
            URL oracle = new URL(url);
            URLConnection yc = oracle.openConnection();
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    yc.getInputStream()));
            String inputLine = null;
            while ((inputLine = in.readLine()) != null) {
                json.append(inputLine);
            }
            in.close();
        } catch (Exception e) {
        }
        return json.toString();
    }


}
